Virtual memory is essentially an imaginary memory area supported by some operating systems in conjunction with the hardware. The purpose of virtual memory is to enlarge the address space, the set of addresses a program can utilize. For example, virtual memory might contain twice as many addresses as main memory. A program using all of virtual memory, therefore, would not be able to fit in main memory all at once. Nevertheless, the computer could execute such a program by copying into main memory those portions of the program needed at any given point during execution.
Paging is a technique used by virtual memory operating systems to help ensure that needed data is available. The operating system copies a certain number of pages from a storage device to main memory. When a program needs a page that is not in main memory, the operating system copies the required page into memory and copies another page back to the disk. A page that is removed from main memory and copied back to the disk is termed paged out.
Paging schemes are often generic to support a variety of applications. A paging scheme decides which pages should be removed from memory (without affecting application correctness) so that the effect on system performance is minimized. A variety of algorithms have been used:                Least Recently Used (LRU)—the page that has been accessed least recently will be paged out.        Most Recently Used (MRU)—the page that has been accessed most recently will be paged out.        First-In, First-Out (FIFO)—the page that was brought into memory first is removed first.        Last-In, Last-Out (LIFO)—the page that was brought into memory last is removed first.        
Paging schemes that are good for operating systems, such as LRU, may not be ideal, in terms of performance, for a particular application. A need arises for a paging scheme that provides improved performance for applications.